package com.dm.wallpaper.library.utils;

import com.dm.wallpaper.library.abilityPackage.WallpaperBoardApplication;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;

public class RuntimeExceptionCatch implements Thread.UncaughtExceptionHandler {

    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        // 捕获异常

        myUncaughtExceptionToDo();
    }


    /**
     * 自定义的对异常的处理
     */
    public void myUncaughtExceptionToDo() {
        Log.i("RuntimeExceptionCatch.myUncaughtExceptionToDo([]):42");
//      // 重启应用
        Toast.show(WallpaperBoardApplication.getInstance(), "请重启程序");
    }


    /**
     * <h1>获取Exception崩溃堆栈</h1>
     * <p>
     * 捕获Exception之后，我们还需要知道崩溃堆栈的信息，这样有助于我们分析崩溃的原因，查找代码的Bug。
     * 异常对象的printStackTrace方法用于打印异常的堆栈信息，根据printStackTrace方法的输出结果，
     * 我们可以找到异常的源头，并跟踪到异常一路触发的过程。
     * @param throwable  捕获的异常对象
     * @return 返回一个异常日志
     */
    public static String getStackTraceInfo(final Throwable throwable) {
        String trace = "";
        try {
            Writer writer = new StringWriter();
            PrintWriter pw = new PrintWriter(writer);
            throwable.printStackTrace(pw);
            trace = writer.toString();
            pw.close();
        } catch (Exception e) {
            return "";
        }
        return trace;
    }
}
